// -*- C++ -*-
/*!
 * @file  ForceSensor.h
 * @brief FS component
 * @date  $Date$
 *
 * $Id$
 */

#ifndef FORCESENSOR_H
#define FORCESENSOR_H

#include <rtm/Manager.h>
#include <rtm/DataFlowComponentBase.h>
#include <rtm/CorbaPort.h>
#include <rtm/DataInPort.h>
#include <rtm/DataOutPort.h>
#include <rtm/idl/BasicDataTypeSkel.h>

// Service implementation headers
// <rtc-template block="service_impl_h">
#include "ForceSensorSVC_impl.h"

// </rtc-template>

// Service Consumer stub headers
// <rtc-template block="consumer_stub_h">

// </rtc-template>

using namespace RTC;

class ForceSensor
    : public RTC::DataFlowComponentBase
{
public:
    ForceSensor(RTC::Manager* manager);
    ~ForceSensor();

    // The initialize action (on CREATED->ALIVE transition)
    // formaer rtc_init_entry()
    virtual RTC::ReturnCode_t onInitialize();

    // The finalize action (on ALIVE->END transition)
    // formaer rtc_exiting_entry()
    virtual RTC::ReturnCode_t onFinalize();

    // The startup action when ExecutionContext startup
    // former rtc_starting_entry()
    // virtual RTC::ReturnCode_t onStartup(RTC::UniqueId ec_id);

    // The shutdown action when ExecutionContext stop
    // former rtc_stopping_entry()
    // virtual RTC::ReturnCode_t onShutdown(RTC::UniqueId ec_id);

    // The activated action (Active state entry action)
    // former rtc_active_entry()
    virtual RTC::ReturnCode_t onActivated(RTC::UniqueId ec_id);

    // The deactivated action (Active state exit action)
    // former rtc_active_exit()
    virtual RTC::ReturnCode_t onDeactivated(RTC::UniqueId ec_id);

    // The execution action that is invoked periodically
    // former rtc_active_do()
    virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id);

    // The aborting action when main logic error occurred.
    // former rtc_aborting_entry()
    // virtual RTC::ReturnCode_t onAborting(RTC::UniqueId ec_id);

    // The error action in ERROR state
    // former rtc_error_do()
    // virtual RTC::ReturnCode_t onError(RTC::UniqueId ec_id);

    // The reset action that is invoked resetting
    // This is same but different the former rtc_init_entry()
    // virtual RTC::ReturnCode_t onReset(RTC::UniqueId ec_id);

    // The state update action that is invoked after onExecute() action
    // no corresponding operation exists in OpenRTm-aist-0.2.0
    // virtual RTC::ReturnCode_t onStateUpdate(RTC::UniqueId ec_id);

    // The action that is invoked when execution context's rate is changed
    // no corresponding operation exists in OpenRTm-aist-0.2.0
    // virtual RTC::ReturnCode_t onRateChanged(RTC::UniqueId ec_id);


protected:
    // Configuration variable declaration
    // <rtc-template block="config_declare">
    int m_fullscale_Fx;
    int m_fullscale_Fy;
    int m_fullscale_Fz;
    int m_fullscale_Mx;
    int m_fullscale_My;
    int m_fullscale_Mz;
    int m_filter_No;
    double m_toolcoordinate_Tx;
    double m_toolcoordinate_Ty;
    double m_toolcoordinate_Tz;
    double m_toolcoordinate_Rx;
    double m_toolcoordinate_Ry;
    double m_toolcoordinate_Rz;

    // </rtc-template>

    // DataInPort declaration
    // <rtc-template block="inport_declare">

    // </rtc-template>

    // DataOutPort declaration
    // <rtc-template block="outport_declare">
    TimedDoubleSeq m_dataout;
    OutPort<TimedDoubleSeq> m_dataoutOut;

    // </rtc-template>

    // CORBA Port declaration
    // <rtc-template block="corbaport_declare">
    RTC::CorbaPort m_PrvPortPort;

    // </rtc-template>

    // Service declaration
    // <rtc-template block="service_declare">
    FSSVC_impl m_fs;

    // </rtc-template>

    // Consumer declaration
    // <rtc-template block="consumer_declare">

    // </rtc-template>

private:
    int dummy;

};


extern "C"
{
void ForceSensorInit(RTC::Manager* manager);
};

#endif // FORCESENSOR_H
